package cn.aiweiyi.qingjing.coupon.template.schedule;

import cn.aiweiyi.qingjing.coupon.template.dao.CouponTemplateDao;
import cn.aiweiyi.qingjing.coupon.template.entity.CouponTemplate;
import cn.aiweiyi.qingjing.coupon.comm.vo.TemplateRule;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 青衿
 * @Date 2020/11/17 13:50
 * 定时清理(Cleanup)已过期的优惠券模板
 **/
@Slf4j
@Component
public class CleanupTask {
    @Resource
    CouponTemplateDao couponTemplateDao;

    //每个一个小时执行一次
    //可以作为一个定时任务,定时清理
    @Scheduled(fixedRate = 60 * 60 * 1000)
    public void offlineCouponTemplate() {
        log.info("开始定时清理过期模板数据...");
        List<CouponTemplate> templates = couponTemplateDao
                .findAllByExpired(false);//查询所有未过期的模板数据
        if (templates.isEmpty()) {
            log.info("所有模板都已过期,清理任务结束");
        }

        Date now = new Date();
        List<CouponTemplate> expiredTemplates = new
                ArrayList<>(templates.size());
        templates.forEach(t -> {
            TemplateRule rule = t.getRule();
            if (rule.getExpiration().getDeadline() < now.getTime()) {
                t.setExpired(true);
                expiredTemplates.add(t);
            }
        });

        if (CollectionUtils.isNotEmpty(expiredTemplates)) {
            log.info("过期模板数量{}", couponTemplateDao.saveAll(expiredTemplates));
        }
        log.info("过期模板已清理。");
    }
}
